package com.softer.chengxin.role.dao;

import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.common.domin.RoleModules;
import com.softer.chengxin.role.dao.provider.RoleDaoProvider;
import com.softer.chengxin.role.entity.Role;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2018/10/13
 */
@Mapper
@Repository
public interface RoleDao {



    /**
     * 删除角色
     *
     * @param id 角色ID
     * @return 处理结果
     */
    @Delete("DELETE FROM roules WHERE id = #{id}")
    int deleteRole(@Param("id") Integer id);

    /**
     * 新增角色
     *
     * @param role 角色信息
     * @return 处理结果
     */
    @Insert("INSERT INTO roules(roles_name,mo_dules,addtime,adder) VALUES(#{role.roleName},#{role.modules},now(),#{role.adder})")
    int addRole(@Param("role") Role role);

    /**
     * 编辑角色
     *
     * @param role 角色信息
     * @return 处理结果
     */
    @Update("UPDATE roules SET roles_name=#{role.roleName},mo_dules=#{role.modules},addtime=NOW(),adder=#{role.adder} WHERE id=#{role.id}")
    int update(@Param("role") Role role);

    /**
     * 获取角色信息
     *
     * @param id 角色ID
     * @return 角色信息
     */
    @Select("SELECT id,roles_name as roleName,mo_dules as modules,adder,addtime FROM roules WHERE id =#{id}")
    Role getRoleInfo(@Param("id") Integer id);

    /**
     * 查询菜单
     *
     * @return 菜单集合
     */
    @Select("SELECT id,module_name as label FROM `module` WHERE parent_id=#{id}")
    List<RoleModules> getModule(@Param("id") Integer id);

    /**
     * 获取当前登陆用户创建的角色列表
     *
     * @param loginName 登陆用户
     * @return 角色列表
     */
    @Select("SELECT id ,roles_name as roleName FROM roules WHERE dic_code in (3,4,5,6,7)")
    List<Role> getRoleList(@Param("adder") String loginName);

    /**
     * 获取该登录名添加的角色数量
     *
     * @param name 登陆名
     * @return 角色数量
     */
    @Select("SELECT COUNT(*) FROM roules WHERE adder=#{name}")
    int getRoleNum(@Param("name") String name);

    /**
     * 加载角色列表
     *
     * @param page      页面信息
     * @param loginName 登陆名
     * @return 角色列表
     */
    @SelectProvider(type = RoleDaoProvider.class, method = "load")
    List<Role> load(@Param("page") Page page, @Param("loginName") String loginName);
}
